gusucode.com > 支持向量机工具箱 - LIBSVM OSU_SVM LS_SVM源码程序 > 支持向量机工具箱 - LIBSVM OSU_SVM LS_SVM\stprtool\generalp\ellips.m
function [varargout]=ellips(MI,SIGMA,R,N) % [varargout]=ellips(MI,SIGMA,R,N) % % ELLIPS creates vectors or matrices for the ellipse plot by % MATLAB functions as PLOT, FILL in 2D or SURF, MESH in 3D. % % An ellipsoid is described in terms of % R^2=(X-MI)'*inv(SIGMA)*(X-MI) % where % MI [Mx1] - is the center of ellipsoid. M is the dimension. % SIGMA [MxM] - determines on shape. % R [1x1] - radius of ellipsoid. % The ellipsoid is interpolated by N lines (N=20 is default). % % Order of the matrix SIGMA (as well as length MI) determines % the number of returned variables: % For 2D (M=2) % [X,Y]=ellips(MI,SIGMA,R,N) % and for 3D (M=3) it is % [X,Y,Z]=ellips(MI,SIGMA,R,N) % % Example: % [x,y]=ellipse([1;1],[1 0.5;0.5 1],1); % plot(x,y); % % See also PLOT, FILL, MESH, SURFACE. % % Statistical Pattern Recognition Toolbox, Vojtech Franc, Vaclav Hlavac % (c) Czech Technical University Prague, http://cmp.felk.cvut.cz % Written Vojtech Franc (diploma thesis) 27.02.2000, 4.4.2000 % Modifications % 24. 6.00 V. Hlavac, comments polished. MI=MI(:); % input arguments processing if nargin < 3, help('ellips'); return; elseif nargin < 4 N=20; end % dimension DIM=size(SIGMA,1); INVSIGMA=inv(SIGMA); if DIM == 3, % 3D ellipsoid, creates the matrix X,Y,Z appropriate for using in % the functions mesh,surf, etc. [X,Y,Z]=sphere(N); X=R*X; Y=R*Y; Z=R*Z; [A,p]=chol(INVSIGMA); if p ~= 0, error('Covariance matrix must be positive definite'); end A=inv(A); [ROWS,COLUMNS]=size(X); % transforms the sphere to the ellipse according to the matrix INVSIGMA for i=1:ROWS, P=[X(i,:);Y(i,:);Z(i,:)]; Q=A*P; % if the translation is given then translate points Q=Q+repmat(MI(:),1,COLUMNS); X(i,:)=Q(1,:); Y(i,:)=Q(2,:); Z(i,:)=Q(3,:); end % for i=1:ROWS % return variables varargout{1}=X; varargout{2}=Y; varargout{3}=Z; elseif DIM == 2, from=0; to=2*pi; step=(to-from)/N; X=cos([from:step:to]); Y=sin([from:step:to]); X=R*X; Y=R*Y; [A,p]=chol(INVSIGMA); if p ~= 0, error('Covariance matrix must be positive definite'); end A=inv(A); P=[X;Y]; Q=A*P; Q=Q+repmat(MI(:),1,N+1); X=Q(1,:); Y=Q(2,:); % return variables varargout{1}=X; varargout{2}=Y; else help('ellips'); end;